home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Utilities / WBStars / source / WBStars_sys.c < prev    next >
C/C++ Source or Header  |  1996-07-25  |  8KB  |  355 lines

  1. /* $VER: WBStars_sys.c 1.28  (25.07.1996) */
  2.  
  3. #include "WBStars_include.h"
  4. #include "WBStars_protos.h"
  5. #include "WBStars_gui.h"
  6.  
  7. struct IntuitionBase    *IntuitionBase;
  8. struct GfxBase            *GfxBase;
  9. struct Library            *CxBase;
  10. struct DosLibrary        *DOSBase;
  11. struct Library            *GadToolsBase;
  12. struct Library            *DiskfontBase;
  13. struct Library            *UtilityBase;
  14. struct Library            *AslBase;
  15. struct ColorMap            *colmap;
  16.  
  17. struct    Screen        *Screen;
  18. struct    Window        *wnd;
  19. struct    RastPort    *RastP;
  20. short            maxx;
  21. short            maxy;
  22. char            gui=FALSE;
  23. char            idcmp=0;
  24. short            anzcolors;
  25.  
  26. char    GetWindow()
  27. {
  28.     char ok=FALSE;
  29.     ULONG    lock;
  30.     char    locked=TRUE;
  31.  
  32.     lock=LockIBase(0);
  33.     Screen    = IntuitionBase->FirstScreen;
  34.     if( ! strcmp(Screen->DefaultTitle,"Workbench Screen") )
  35.     {
  36.         if( mode==MODE_WIN )
  37.         {
  38.             wnd=Screen->FirstWindow;
  39.  
  40.             if( wnd )
  41.             {
  42.                 do
  43.                 {
  44.                     if( (wnd->Flags&WFLG_BACKDROP) && (wnd->Flags&WFLG_BORDERLESS) && (wnd->Flags&WFLG_WBENCHWINDOW) )
  45.                     {
  46.                         ok=TRUE;
  47.                         RastP        = wnd->RPort;
  48.                         anzcolors    = (short)(1<<(RastP->BitMap->Depth));
  49.                         colmap=wnd->WScreen->ViewPort.ColorMap;
  50.                         maxx        = wnd->Width;
  51.                         maxy        = wnd->Height;
  52.                         UnlockIBase(lock);
  53.                         locked=FALSE;
  54.                         bgpen=bgpen%anzcolors;
  55.                         if(gui)
  56.                         {
  57.                             SetGadgets();
  58.                         }
  59.                         else
  60.                         {
  61.                             colflag=FALSE;
  62.                         }
  63.                         ColorTable();
  64.                         NewStars();
  65.                     }
  66.                     else
  67.                     {
  68.                         wnd=wnd->NextWindow;
  69.                     }
  70.                 }while( !ok && wnd );
  71.             }
  72.         }
  73.         else
  74.         {
  75.             ok=TRUE;
  76.             RastP    = &(Screen->RastPort);
  77.             anzcolors    = (short)(1<<(RastP->BitMap->Depth));
  78.             colmap=Screen->ViewPort.ColorMap;
  79.             maxx    = Screen->Width;
  80.             maxy    = Screen->Height;            
  81.             UnlockIBase(lock);
  82.             locked=FALSE;
  83.             bgpen=bgpen%anzcolors;
  84.             if(gui)
  85.             {
  86.                 SetGadgets();
  87.             }
  88.             else
  89.             {
  90.                 colflag=FALSE;
  91.             }
  92.             ColorTable();
  93.             NewStars();
  94.         }
  95.     }
  96.  
  97.     if(locked)
  98.     {
  99.         UnlockIBase(lock);
  100.     }
  101.  
  102.     return ok;
  103. }
  104.  
  105. char    WinWait()
  106. {
  107.     ULONG    lock;
  108.     char    scrn;
  109.  
  110.     lock=LockIBase(0);
  111.     scrn=(char)(IntuitionBase->FirstScreen!=Screen);
  112.     UnlockIBase(lock);
  113.  
  114.     if( scrn||((mode==MODE_WIN)&& !CheckWindow2()) )
  115.     {
  116.         ClearIfOk();
  117.         Delay(200);
  118.         do
  119.         {
  120.             Delay( EVENT_WAIT );
  121.         }while( (CheckInteraction()==ACTIVE) && (GetWindow()==FALSE) );
  122.     }
  123.  
  124.     return (char)(status==ACTIVE);
  125. }
  126.  
  127. char    CheckWindow2()
  128. {
  129.     struct Window    *wnd2;
  130.     ULONG    lock;
  131.  
  132.     lock=LockIBase(0);
  133.  
  134.     wnd2=Screen->FirstWindow;
  135.     while( wnd2 && (wnd2!=wnd) )
  136.     {
  137.         wnd2=wnd2->NextWindow;
  138.     }
  139.  
  140.     UnlockIBase(lock);
  141.  
  142.     return (char)wnd2;
  143. }
  144.  
  145. char    CheckInteraction()
  146. {
  147.     CxMsg    *msg;
  148.     ULONG    msgid, msgtype;
  149.  
  150.     while(msg = (CxMsg *)GetMsg(broker_mp))
  151.     {
  152.         msgid = CxMsgID(msg);
  153.         msgtype = CxMsgType(msg);
  154.         ReplyMsg((struct Message *)msg);
  155.         switch(msgtype)
  156.         {
  157.             case CXM_COMMAND:
  158.             switch(msgid)
  159.             {
  160.                 case CXCMD_DISABLE:
  161.                     status=INACTIVE;
  162.                     ClearIfOk();
  163.                     Screen=NULL;
  164.                     wnd=NULL;
  165.                     ActivateCxObj(broker, 0L);
  166.                     break;
  167.                 case CXCMD_ENABLE:
  168.                     status=ACTIVE;
  169.                     ActivateCxObj(broker, 1L);
  170.                     break;
  171.                 case CXCMD_KILL:
  172.                     status=QUIT;
  173.                     ClearIfOk();
  174.                     if( gui )
  175.                     {
  176.                         CloseWBStarsWindow();
  177.                         CloseDownScreen();
  178.                     }
  179.                     break;
  180.                 case CXCMD_UNIQUE:
  181.                     if( !gui )
  182.                     {
  183.                         gui=OpenWBStarsWindow2();
  184.                     }
  185.                     else
  186.                     {
  187.                         WindowToFront(WBStarsWnd);
  188.                     }
  189.                     break;
  190.                 case CXCMD_APPEAR:
  191.                     if( !gui )
  192.                     {
  193.                         gui=OpenWBStarsWindow2();
  194.                     }
  195.                     else
  196.                     {
  197.                         WindowToFront(WBStarsWnd);
  198.                     }
  199.                     break;
  200.                 case CXCMD_DISAPPEAR:
  201.                     if( gui )
  202.                     {
  203.                         gui=FALSE;
  204.                         CloseWBStarsWindow();
  205.                         CloseDownScreen();
  206.                     }
  207.                     break;
  208.             }
  209.             break;
  210.         }
  211.     }
  212.  
  213.     if( gui )
  214.     {
  215.         HandleWBStarsIDCMP();
  216.         if( idcmp )
  217.         {
  218.             switch(idcmp)
  219.             {
  220.                 case IDC_HIDE:
  221.                     gui=FALSE;
  222.                     CloseWBStarsWindow();
  223.                     CloseDownScreen();
  224.                     break;
  225.                 case IDC_QUIT:
  226.                     status=QUIT;
  227.                     ClearIfOk();
  228.                     CloseWBStarsWindow();
  229.                     CloseDownScreen();
  230.                     break;
  231.             }
  232.             idcmp=0;
  233.         }
  234.     }
  235.  
  236.     return status;
  237. }
  238.  
  239. void    ClearIfOk()
  240. {
  241.     struct Screen *screen2;
  242.     char i;
  243.     ULONG    lock;
  244.  
  245.     if((mode==MODE_SCREEN)||CheckWindow2())
  246.     {
  247.  
  248.         lock=LockIBase(0);
  249.         screen2=IntuitionBase->FirstScreen;
  250.         while( screen2 && (screen2!=Screen) )
  251.         {
  252.             screen2=screen2->NextScreen;
  253.         }
  254.         UnlockIBase(lock);
  255.         if( screen2 )
  256.         {
  257.             for(i=0; i<anzstars; i++)
  258.             {
  259.                 ClearStar(i);
  260.             }
  261.         }
  262.     }
  263. }
  264.  
  265. char    OpenWBStarsWindow2()
  266. {
  267.     char ret=FALSE;
  268.     char    i,j;
  269.     struct DrawInfo *dri;
  270.  
  271.     immediate=FALSE;
  272.     if( SetupScreen()==0 )
  273.     {
  274.         if(OpenWBStarsWindow()==0)
  275.         {
  276.             ret=TRUE;
  277.             SetGadgets();
  278.             dri=GetScreenDrawInfo(WBStarsWnd->WScreen);
  279.             SetAPen(WBStarsWnd->RPort,dri->dri_Pens[SHADOWPEN]);
  280.             Move(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+2,WBStarsWnd->BorderTop+1);
  281.             Draw(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+19,WBStarsWnd->BorderTop+1);
  282.             Move(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+1,WBStarsWnd->BorderTop+2);
  283.             Draw(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+1,WBStarsWnd->BorderTop+19);
  284.             SetAPen(WBStarsWnd->RPort,dri->dri_Pens[SHINEPEN]);
  285.             Move(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+20,WBStarsWnd->BorderTop+2);
  286.             Draw(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+20,WBStarsWnd->BorderTop+19);
  287.             Move(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+2,WBStarsWnd->BorderTop+20);
  288.             Draw(WBStarsWnd->RPort,WBStarsWnd->BorderLeft+19,WBStarsWnd->BorderTop+20);
  289.             for(i=0;i<16;i++)
  290.             {
  291.                 for(j=0;j<16;j++)
  292.                 {
  293.                     SetAPen(WBStarsWnd->RPort,coltable[15-j][15-i]);
  294.                     WritePixel(WBStarsWnd->RPort,i+WBStarsWnd->BorderLeft+3,j+WBStarsWnd->BorderTop+3);
  295.                 }
  296.             }
  297.         }
  298.         else
  299.         {
  300.             CloseDownScreen();
  301.         }
  302.     }
  303.  
  304.     return ret;
  305. }
  306.  
  307. void    SetGadgets()
  308. {
  309.     GT_SetGadgetAttrs(WBStarsGadgets[GD_azimut],WBStarsWnd,NULL,GTNM_Number,az,TAG_DONE);
  310.     GT_SetGadgetAttrs(WBStarsGadgets[GD_height],WBStarsWnd,NULL,GTNM_Number,he,TAG_DONE);
  311.  
  312.     GT_SetGadgetAttrs(WBStarsGadgets[GD_azimut2],WBStarsWnd,NULL,GTIN_Number,az2,TAG_DONE);
  313.     GT_SetGadgetAttrs(WBStarsGadgets[GD_height2],WBStarsWnd,NULL,GTIN_Number,he2,TAG_DONE);
  314.     GT_SetGadgetAttrs(WBStarsGadgets[GD_bg_set],WBStarsWnd,NULL,GTIN_Number,bgpen,TAG_DONE);
  315.  
  316.     GT_SetGadgetAttrs(WBStarsGadgets[GD_mode_win],WBStarsWnd,NULL,GTCB_Checked,(mode==MODE_WIN),TAG_DONE);
  317.  
  318.     GT_SetGadgetAttrs(WBStarsGadgets[GD_warp],WBStarsWnd,NULL,GTSL_Level,warpf,TAG_DONE);
  319.     GT_SetGadgetAttrs(WBStarsGadgets[GD_pri],WBStarsWnd,NULL,GTSL_Level,wbs_pri,TAG_DONE);
  320.     GT_SetGadgetAttrs(WBStarsGadgets[GD_stars],WBStarsWnd,NULL,GTSL_Level,anzstars,TAG_DONE);
  321.     GT_SetGadgetAttrs(WBStarsGadgets[GD_contrast],WBStarsWnd,NULL,GTSL_Level,contrast,TAG_DONE);
  322.  
  323.     GT_SetGadgetAttrs(WBStarsGadgets[GD_status],WBStarsWnd,NULL,GTCY_Active,(status==INACTIVE),TAG_DONE);
  324.  
  325.     GT_SetGadgetAttrs(WBStarsGadgets[GD_bg_next],WBStarsWnd,NULL,GA_DISABLED,!colflag,TAG_DONE);
  326. }
  327.  
  328. char    OpenLibraries()
  329. {
  330.     CxBase            = (struct Library*) OpenLibrary("commodities.library", 36L);
  331.     GadToolsBase    = (struct Library*) OpenLibrary("gadtools.library", 0);
  332.     DiskfontBase    = (struct Library*) OpenLibrary("diskfont.library", 0);
  333.     UtilityBase        = (struct Library*) OpenLibrary("utility.library", 0);
  334.     AslBase            = (struct Library*) OpenLibrary("asl.library", 0);
  335.     DOSBase            = (struct DosLibrary*) OpenLibrary("dos.library", 0);
  336.     IntuitionBase    = (struct IntuitionBase*) OpenLibrary("intuition.library",0);
  337.     GfxBase            = (struct GfxBase*) OpenLibrary("graphics.library",0);
  338.  
  339.     if( !IntuitionBase||!GfxBase||!CxBase||!GadToolsBase||!DiskfontBase||!UtilityBase||!DOSBase||!AslBase )
  340.         return FALSE;
  341.     return TRUE;    
  342. }
  343.  
  344. void    CloseLibraries()
  345. {
  346.     if(IntuitionBase)    CloseLibrary((struct Library*)IntuitionBase);
  347.     if(GfxBase)            CloseLibrary((struct Library*)GfxBase);
  348.     if(CxBase)            CloseLibrary( CxBase );
  349.     if(DOSBase)            CloseLibrary((struct Library*)DOSBase);
  350.     if(GadToolsBase)    CloseLibrary( GadToolsBase );
  351.     if(DiskfontBase)    CloseLibrary( DiskfontBase );
  352.     if(UtilityBase)        CloseLibrary( UtilityBase );
  353.     if(AslBase)            CloseLibrary( AslBase );
  354. }
  355.